Spdlog日志库快速上手

简单介绍Spdlog日志库的安装与使用.

简介

Very fast, header-only/compiled, C++ logging library.

Spdlog是非常快的c++日志库。支持编译后链接使用以及仅仅使用头文件,即快速可集成进项目。

下载与使用

GitHub - gabime/spdlog: Fast C++ logging library.

Header only version

拷贝include路径下的文件到项目中,注意要使用c++11.

编译

1
2
3
4
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog
$ cmake -B build
$ cmake --build build

CMake中使用spdlog

方法一

spdlog路径任意

1
2
3
4
5
# include spdlog 
include_directories(/path/to/your/spdlog/include/)

# target link library
target_link_libraries(target /path/to/your/spdlog/build/libspdlog.a)

方法二

spdlog在当前项目的thirdpatry文件夹下

1
2
3
# 使用了相对路径
add_subdirectory(thirdparty/spdlog)
include_directories(thirdparty/spdlog/include)

方法三

  • 首先安装spdlog到全局路径如: /usr/local/include
    1
    2
    3
    4
    5
    6
    $ git clone https://github.com/gabime/spdlog.git
    $ cd spdlog
    $ cmake -B build
    $ cmake --build build
    $ cd build
    $ sudo cmake --install . --config Debug
  • 然后在项目里直接使用即可

Spdlog日志库的特性

支持多线程

可以创建线程安全的logger, 如:

1
auto logger = spdlog::basic_logger_mt(...);

_mt结尾意味着multi thread。以_st结尾意味着single thread, 如:

1
auto logger = spdlog::basic_logger_st(...);

自定义日志格式以及等级

官方文档连接

1
2
3
4
5
// 日志等级
spdlog::level::level_enum level = spdlog::level::level_enum::debug
logger->set_level(level);
// 日志格式
logger->set_pattern("[%D %H:%M:%S.%f] [thread %t] [%l] %v");

fmt格式的输出

Format String Syntax ‒ fmt 9.1.0 documentation

1
2
std::string str = "abc";
spdlog::info("str = {}, size = {}", str, str.size());

还支持用户自定义数据结构的fmt输出. 文档连接

多种logger类型

有控制台、文件、异步等logger,详情见:https://github.com/gabime/spdlog/wiki/2.-Creating-loggers

自定义刷新

支持手动刷盘以及定时刷盘,详情见:https://github.com/gabime/spdlog/wiki/7.-Flush-policy

替换默认的logger

  • 默认的logger输出到控制台,支持替换默认的logger.
  • spdlog::infospdlog::debug等会使用默认的logger.
1
2
spdlog::set_default_logger(some_other_logger);
spdlog::info("Use the new default logger");
作者

Jsss

发布于

2023-04-05

更新于

2023-04-05

许可协议


评论